# 路由和请求处理
from flask import request, jsonify
from models import User
from app import db


def register_routes(app):
    """注册所有路由"""

    @app.route('/users', methods=['POST'])
    def create_user():
        # 从请求中获取JSON数据
        data = request.get_json()

        # 验证数据
        if not data or not data.get('username') or not data.get('email'):
            return jsonify({'error': '缺少用户名或邮箱'}), 400

        # 检查用户名是否已存在
        if User.query.filter_by(username=data['username']).first():
            return jsonify({'error': '用户名已存在'}), 400

        # 检查邮箱是否已存在
        if User.query.filter_by(email=data['email']).first():
            return jsonify({'error': '邮箱已存在'}), 400

        # 创建新用户对象
        new_user = User(
            username=data['username'],
            email=data['email']
        )

        # 保存到数据库
        db.session.add(new_user)
        db.session.commit()

        # 返回创建的用户信息
        return jsonify(new_user.to_dict()), 201

    @app.route('/users', methods=['GET'])
    def get_users():
        # 从查询参数中获取user_id
        user_id = request.args.get('user_id')

        if user_id:
            # 校验user_id是否为数字
            if not user_id.isdigit():
                return jsonify({'error': 'user_id 必须是数字'}), 400

            # 查询指定ID的用户
            user = User.query.get_or_404(int(user_id))
            return jsonify(user.to_dict())
        else:
            # 查询所有用户
            users = User.query.all()
            return jsonify([user.to_dict() for user in users])

    @app.route('/users/<int:user_id>', methods=['PUT'])
    def update_user(user_id):
        # 查询指定ID的用户
        user = User.query.get_or_404(user_id)
        data = request.get_json()

        if not data:
            return jsonify({'error': '没有提供更新数据'}), 400

        # 更新字段
        if 'username' in data:
            user.username = data['username']
        if 'email' in data:
            user.email = data['email']

        # 保存更新
        db.session.commit()
        return jsonify(user.to_dict())

    @app.route('/users/<int:user_id>', methods=['DELETE'])
    def delete_user(user_id):
        # 查询指定ID的用户
        user = User.query.get_or_404(user_id)

        # 删除用户
        db.session.delete(user)
        db.session.commit()

        return jsonify({'message': '用户已成功删除'}), 200
